package com.content.scaffold.common.annotation;

import java.lang.annotation.*;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface QueryField {
    QueryType type() default QueryType.EQ;
    DateFillRule dateFill() default DateFillRule.NONE;
    LogicType logic() default LogicType.AND;
    String customSql() default "";

    // 新增1：子查询相关属性
    boolean subQuery() default false; // 是否为子查询
    Class<?> subQueryMapper() default void.class; // 子查询对应的Mapper（需继承BaseMapper）
    String subQueryMethod() default "listObjs"; // 子查询执行方法（默认查询主键列表）
    String subQueryField() default ""; // 子查询字段名（用于构建查询条件）
    Class<?> subQueryEntity() default void.class; // 子查询实体类（用于获取Lambda）

    // 新增2：分组标识（相同groupKey的条件会被括号包裹，实现优先级）
    String groupKey() default ""; // 如"group1"，空表示不分组

    // 原有枚举不变
    enum QueryType {
        EQ, NEQ, LIKE, LIKE_LEFT, LIKE_RIGHT, BETWEEN, IN, NOT_IN, GT, LT, GE, LE, IS_NULL, IS_NOT_NULL
    }

    enum DateFillRule {
        NONE, START_OF_DAY, END_OF_DAY
    }

    enum LogicType {
        AND, OR
    }
}
